package generics.and.colecctions.ordenada.y.clasificado;

import java.util.LinkedList;
import java.util.Queue;

public class LinkedListClass {

	public static void main(String[] args) {
		Queue<Integer> listaLinkedList = new LinkedList<Integer>();
		listaLinkedList.add(2);
		System.out.println(((LinkedList<Integer>) listaLinkedList).getFirst());

		Queue<Person> q = new LinkedList<Person>();
		q.offer(new Person("Pope"));
		q.offer(new Person("John"));
		Queue<Person> helpedQ = new LinkedList<>();
		LinkedListClass h = new LinkedListClass();
		h.helpPeople(q, helpedQ);
	}

	public static void helpPeople(Queue people, Queue helped) {
		do {
			// Recupera y elimina la cabecera de esta cola, o devuelve null si
			// esta cola está vacía.
			Person p = (Person) people.poll();
			System.out.println("Helped: " + p + " ");
			// Inserta el elemento especificado en esta cola si es posible
			// hacerlo de inmediato, sin violar las restricciones de capacidad.
			// Cuando se utiliza una cola de capacidad restringida, este método
			// es generalmente preferible añadir, que puede dejar de insertar un
			// elemento solamente por lanzar una excepción.
			helped.offer(p.getName());
		} while (!people.isEmpty());
	}
}

class Person {
	private String name;

	public Person(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + "]";
	}

}
